//testbench
`timescale  1ns / 1ps       //仿真时间单位/仿真时间精度

module testbench_demo;      //模块名，与文件名相同

parameter PERIOD  = 10;

// inputs
//按照与demo.v相同的命名，输入输出信号与demo.v相同

reg clk=0;
reg rst_n=0;
reg [3:0] i_data;
reg [3:0] q_data;
reg ready_in=0;
reg [1:0] sel=0;

// outputs
wire [4:0] out_data;
wire ready_out;

// generate clk
initial
begin
    forever #(PERIOD/2)  clk=~clk;  
    /*永久循环，产生一个时钟，#代表延时控制，#(PERIOD/2)即#5，
    即延时5ns（5个时间单位）对其自身取反一次*/
end

//generate inputs
initial
begin
    #(PERIOD*2) rst_n = 1;
    #200
    i_data = 4'd5;
    q_data = 4'ha;//q_data赋值为十进制11
    #100
    ready_in = 1;
    sel = 2'b10;
end

//例化
demo u_demo(
    .clk(clk),
    .rst_n(rst_n),
    .i_data(i_data),
    .q_data(q_data),
    .ready_in(ready_in),
    .sel(sel),
    .out_data(out_data),
    .ready_out(ready_out)
);

endmodule